package soccerBet.project.services;

import soccerBet.project.Calculation.AvaliationFunction;
import soccerBet.project.Calculation.Team;
import soccerBet.project.dao.ClassificacaoDAO;
import soccerBet.project.dao.JogoDAO;
import soccerBet.project.dao.PrecosDAO;
import soccerBet.project.objects.Apostas;
import soccerBet.project.objects.Classificacao;
import soccerBet.project.objects.Jogo;
import soccerBet.project.objects.Runner;
import soccerBet.project.ruleEngine.ApostaRule;
import soccerBet.project.ruleEngine.TempoJogo;
import soccerBet.project.utils.Utils;

public class InputValuesService {
	
	public PrecosDAO precosDao = new PrecosDAO();
	public  JogoDAO jogoDao = new JogoDAO();
	private ApostaRule betRule;
	private AvaliationFunction avaliation;

	public InputValuesService(){
		
	}

	public InputValuesService(Jogo jogo) {
		// TODO Auto-generated constructor stub


		ClassificacaoDAO cDao = new ClassificacaoDAO();

		jogoDao.getEquipaCasa(jogo.getIdJogo());
		
		
		Classificacao cHome = cDao.getClassificacao(jogoDao.getEquipaCasaObj().getIdEquipa());

		Team home = new Team(cHome, jogoDao.getEquipaCasaObj(),true);
		
		jogoDao.getEquipaFora(jogo.getIdJogo());
		
		Classificacao cAway = cDao.getClassificacao(jogoDao.getEquipaForaObj().getIdEquipa());

		Team away = new Team(cAway, jogoDao.getEquipaForaObj(),false);

		this.avaliation = new AvaliationFunction(home, away);

	}

	
	public InputValuesService loadAposta(Integer idPrecos, int idJogo) {
		// TODO Auto-generated method stub
		
		Apostas aposta = precosDao.getAposta(idPrecos);
		Runner runner = precosDao.getRunner(idPrecos);
	
		
		try{
			
			this.betRule.setTipoAposta(aposta.getApostaSid());
			this.betRule.setEstado(runner.getEstado());
			this.betRule.setIdJogo(idJogo);
			
		}catch(Exception e){
			System.out.println("Excepcao3:"+e.getMessage());
		}
		
		return this;
	}
	
	
	public AvaliationFunction calcPossibilitiesService(Jogo jogo) {

		ClassificacaoDAO cDao = new ClassificacaoDAO();

		jogoDao.getEquipaCasa(jogo.getIdJogo());
		
		
		Classificacao cHome = cDao.getClassificacao(jogoDao.getEquipaCasaObj().getIdEquipa());

		Team home = new Team(cHome, jogoDao.getEquipaCasaObj(),true);
		
		jogoDao.getEquipaFora(jogo.getIdJogo());
		
		Classificacao cAway = cDao.getClassificacao(jogoDao.getEquipaForaObj().getIdEquipa());

		Team away = new Team(cAway, jogoDao.getEquipaForaObj(),false);

		return new AvaliationFunction(home, away);

	}

	

	public void setAvaliation(AvaliationFunction avaliation) {
		this.avaliation = avaliation;
	}

	public AvaliationFunction getAvaliation() {
		return avaliation;
	}

	public void setBetRule(ApostaRule betRule) {
		this.betRule = betRule;
	}

	public ApostaRule getBetRule() {
		return betRule;
	}

	
}
